package co.gov.medellin.ssti.sub.service;

import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;

import javax.naming.NamingException;

import co.gov.medellin.ssti.sub.common.ConexionFactory;
import co.gov.medellin.ssti.sub.model.dao.DAOFactory;
import co.gov.medellin.ssti.sub.model.dao.IVerificacionDAO;
import co.gov.medellin.ssti.sub.model.dao.exception.DAOException;
import co.gov.medellin.ssti.sub.model.vo.VerificacionVO;

public class VerificacionService {
	/**
	 * Metodo que se encarga de llamar el procedimiento almacenado
	 * P_POBLA_DATOS_DE_CLOB_VERI
	 * 
	 * @param fileData
	 *            archivo subido por el usuario.
	 * @param nomUser
	 *            nombre del usuario.
	 * @throws SQLException
	 * @throws UnsupportedEncodingException
	 */
	public void uploadFile(byte[] fileData, String nomUser)
			throws DAOException, UnsupportedEncodingException {
		IVerificacionDAO verificacionDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			verificacionDAO = DAOFactory.getDAOFactory(DAOFactory.ORACLE)
					.getVerificacionDAO(con);
			verificacionDAO.uploadFile(fileData, nomUser);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (verificacionDAO != null) {
				if (!verificacionDAO.isConnClosed()) {
					verificacionDAO.close();
				}
			}
		}
	}

	/**
	 * Metodo que elimina los registros en TCS_BEN_SUB_VERIFICACION cuyo
	 * USUARIO_CREA sea igual a nomUser.
	 * 
	 * @param nomUser
	 *            Nombre del usuario.
	 * @return Numero de filas retornadas por la ejecucion de la sentencia.
	 * @throws SQLException
	 */
	public int deleteRecordsOld(String nomUser) throws DAOException {
		IVerificacionDAO verificacionDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			verificacionDAO = DAOFactory.getDAOFactory(DAOFactory.ORACLE)
					.getVerificacionDAO(con);
			return verificacionDAO.deleteRecordsOld(nomUser);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (verificacionDAO != null) {
				if (!verificacionDAO.isConnClosed()) {
					verificacionDAO.close();
				}
			}
		}
	}

	/**
	 * Metodo que retorna los registros creados por el usuario. TODO: (mejorar
	 * esta descripcion)
	 * 
	 * @param nomUser
	 * @return Collection de VerificacionVO.
	 * @throws SQLException
	 */
	public Collection<VerificacionVO> findVerification(String nomUser)
			throws DAOException {
		IVerificacionDAO verificacionDAO = null;
		try {
			Connection con = ConexionFactory.getInstance().getConnection();
			verificacionDAO = DAOFactory.getDAOFactory(DAOFactory.ORACLE)
					.getVerificacionDAO(con);
			return verificacionDAO.findVerification(nomUser);
		} catch (NamingException e) {
			throw new DAOException(e);
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			if (verificacionDAO != null) {
				if (!verificacionDAO.isConnClosed()) {
					verificacionDAO.close();
				}
			}
		}
	}
}
